home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-10-02 | 2.9 KB | 95 lines | [TEXT/CWIE] |
- unit MyHandles;
-
- interface
-
- uses
- Types, Memory;
-
- type
- HandleArray = ^Ptr;
-
- function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
- procedure HandleArrayDestroy (var hhhh: HandleArray);
- function HandleArrayCount (hhhh: HandleArray): longint;
- function HandleArrayGetSize (hhhh: HandleArray): longint;
- function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
- function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
- procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
- procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
- procedure HandleArrayDelete(hhhh: HandleArray; index: longint);
- procedure HandleArrayReset (hhhh: HandleArray);
-
- implementation
-
- uses
- OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory;
-
- function HandleArrayCreate (var hhhh: HandleArray; size: longint): OSErr;
- var
- err: OSErr;
- begin
- err := MNewHandle(hhhh, SizeOf(longint));
- if err = noErr then begin
- longintH(hhhh)^^ := size;
- end;
- HandleArrayCreate := err;
- end;
-
- procedure HandleArrayDestroy (var hhhh: HandleArray);
- begin
- MDisposeHandle( hhhh );
- end;
-
- procedure HandleArrayReset (hhhh: HandleArray);
- begin
- Assert(hhhh <> nil);
- SetHandleSize(Handle(hhhh), SizeOf(longint));
- end;
-
- function HandleArrayCount (hhhh: HandleArray): longint;
- begin
- Assert(hhhh <> nil);
- HandleArrayCount := (GetHandleSize(Handle(hhhh)) - SizeOf(longint)) div longintH(hhhh)^^;
- end;
-
- function HandleArrayGetSize (hhhh: HandleArray): longint;
- begin
- Assert(hhhh <> nil);
- if GetHandleSize(Handle(hhhh)) > SizeOf(longint) then begin
- HandleArrayGetSize := longintH(hhhh)^^;
- end else begin
- HandleArrayGetSize := -1;
- end;
- end;
-
- function HandleArrayAppend (hhhh: HandleArray; data: Ptr): OSErr;
- begin
- Assert(hhhh <> nil);
- HandleArrayAppend := PtrAndHand(data, Handle(hhhh), longintH(hhhh)^^);
- end;
-
- function HandleArrayInsert (hhhh: HandleArray; index: longint; data: Ptr): OSErr;
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh) + 1));
- HandleArrayInsert := MMungerInsert(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, data, longintH(hhhh)^^);
- end;
-
- procedure HandleArrayGet (hhhh: HandleArray; index: longint; data: Ptr);
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- BlockMoveData(Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), data, longintH(hhhh)^^);
- end;
-
- procedure HandleArraySet (hhhh: HandleArray; index: longint; data: Ptr);
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- BlockMoveData(data, Ptr(ord(hhhh^) + SizeOf(longint) + (index - 1) * longintH(hhhh)^^), longintH(hhhh)^^);
- end;
-
- procedure HandleArrayDelete (hhhh: HandleArray; index: longint);
- begin
- Assert((hhhh <> nil) & (0 < index) & (index <= HandleArrayCount(hhhh)));
- MMungerDelete(Handle(hhhh), SizeOf(longint) + (index - 1) * longintH(hhhh)^^, longintH(hhhh)^^);
- end;
-
- end.